]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
telepathyClient: fix duplicate copy of first message in a chat
authorDan Winship <danw@gnome.org>
Wed, 23 Mar 2011 19:25:42 +0000 (15:25 -0400)
committerDan Winship <danw@gnome.org>
Fri, 25 Mar 2011 22:47:01 +0000 (18:47 -0400)
The chat-history-fill-in code had logic to avoid appending two
messages when a message appeared in both the log and the pending
messages. But it wasn't working because of an incorrect object field
name.

Additionally, the code was previously keeping the copy of the message
from the log, and suppressing the copy from pending. But that meant
that once the previous bug was fixed, it would think it had only shown
old messages, and so it would create a source but not notify it. So
fix it to suppress the log message and show the pending message.

https://bugzilla.gnome.org/show_bug.cgi?id=645612

js/ui/telepathyClient.js

index 4634a40d308ed63ac6e612356d909a872431fd17..b59c0581c654b319bba11df9845dbd68b2f5f848 100644 (file)
@@ -245,36 +245,35 @@ Source.prototype = {
         let [success, events] = logManager.get_filtered_events_finish(result);
 
         let logMessages = events.map(makeMessageFromTplEvent);
-        for (let i = 0; i < logMessages.length; i++) {
-            this._notification.appendMessage(logMessages[i], true);
-        }
 
-        let pendingMessages = this._channel.get_pending_messages();
-        let hasPendingMessage = false;
-        for (let i = 0; i < pendingMessages.length; i++) {
-            let message = makeMessageFromTpMessage(pendingMessages[i], NotificationDirection.RECEIVED);
-
-            // Skip any pending messages that are in the logs.
-            let inLog = false;
-            for (let j = 0; j < logMessages.length; j++) {
-                let logMessage = logMessages[j];
-                if (logMessage.timestamp == message.timestamp && logMessage.text == message.body) {
-                    inLog = true;
+        let pendingTpMessages = this._channel.get_pending_messages();
+        let pendingMessages = pendingTpMessages.map(function (tpMessage) { return makeMessageFromTpMessage(tpMessage, NotificationDirection.RECEIVED); });
+
+        for (let i = 0; i < logMessages.length; i++) {
+            let logMessage = logMessages[i];
+            let isPending = false;
+
+            // Skip any log messages that are also in pendingMessages
+            for (let j = 0; j < pendingMessages.length; j++) {
+                let pending = pendingMessages[j];
+                if (logMessage.timestamp == pending.timestamp && logMessage.text == pending.text) {
+                    isPending = true;
+                    break;
                 }
             }
 
-            if (inLog)
-                continue;
-
-            this._notification.appendMessage(message, true);
-            hasPendingMessage = true;
+            if (!isPending)
+                this._notification.appendMessage(logMessage, true);
         }
 
+        for (let i = 0; i < pendingMessages.length; i++)
+            this._notification.appendMessage(pendingMessages[i], true);
+
         // Only show the timestamp if we have at least one message.
-        if (hasPendingMessage || logMessages.length > 0)
+        if (pendingMessages.length > 0 || logMessages.length > 0)
             this._notification.appendTimestamp();
 
-        if (hasPendingMessage)
+        if (pendingMessages.length > 0)
             this.notify();
     },